www.gusucode.com > matlab用户界面的卡尔曼滤波程序 > Kalman filter_GUI\m_files\start_callback.m
function start_callback try load inidata; catch msgbox('The filter has not been initialized!','Warning','warn','modal'); return end delete(gca); setaxis; Pk_1=P0; Xk_1=X0; k=1; order=length(A); BII=findobj(gcf,'tag','start'); mp=get(BII,'userdata'); set(BII,'userdata',mp+.0001);%to end last 'start circle' mp=get(BII,'userdata'); BIII=findobj(gcf,'tag','stop'); set(BIII,'userdata',1,'String','Stop?'); M=findobj(gcf,'tag','time'); t=get(M,'userdata'); CI=findobj(gcf,'tag','compo1'); if isempty(get(CI,'userdata')) set(CI,'userdata',1:order); end co=get(CI,'userdata');%co decides the output components CII=findobj(gcf,'tag','p'); cii=get(CII,'userdata'); if cii==1 si=1; else si=2;%si decides whether to output error or state end L=findobj(gcf,'tag','legendh'); set(L,'userdata',0); load fZk;% load mesurements %%%%%%%%%%%%%%%%%% % Filtering Loop % %%%%%%%%%%%%%%%%%% try while k<=t(2) if get(BII,'userdata')~=mp%to end last 'start circle' break; end Phik_=A; Zk=Zkk{k};%Zkk is from fZk Gamak_=B; Hk=H; Qk_1=Q; Rk=R; Pk_=Phik_*Pk_1*Phik_'+Gamak_*Qk_1*Gamak_'; Kk=Pk_*Hk'*(Hk*Pk_*Hk'+Rk)^(-1); I=eye(length(Pk_)); Pkk=(I-Kk*Hk)*Pk_*(I-Kk*Hk)'+Kk*Rk*Kk'; Xk_=Phik_*Xk_1; Xk=Xk_+Kk*(Zk-Hk*Xk_); drawing(Pk_1,Pkk,Xk_1,Xk,k,co,si); Pk_1=Pkk; Xk_1=Xk; k=k+1; end catch return end